package zhangcy.day0109.carlottery.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 使用单例模式(懒汉模式)
 * 加载配置资源管理器
 */
public class ConfigManager {
    // 1、定义静态实例引用
    private volatile static ConfigManager configManager;
    // 定义一个静态Properties(解析处理资源文件相关信息) 实例引用
    private static Properties properties;
    // 2、私有构造
    private ConfigManager(){
        /* 初始加载处理 数据库资源配置文件 */
        // ① 定义 database.properties 配置文件路径
        String configPath = "database.properties";
        // ② 创建 properties 实例对象
        properties = new Properties();
        // ③ 通过类加载器加载解析 database.properties 配置文件
        InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configPath);
        // ④ 加载输入流
        try {
            properties.load(is);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                if (is == null) {
                    is.close();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
    // 3、对外提供调用该类静态实例的静态方法
    public static ConfigManager getInstance() {
        // 判断该静态实例非空
        if (configManager == null) {
            // 加锁
            synchronized (ConfigManager.class) {
                // 双重校验判断非空
                if (configManager == null) {
                    configManager = new ConfigManager();
                }
            }
        }
        return configManager;
    }
    // 4、对外提供一个获取properties资源配置文件信息的方法
    public String getProperty(String key) {
        return properties.getProperty(key);
    }
}
